package com.dapeng.cleardatabackend.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dapeng.cleardatabackend.model.dto.node.NodeAddRequest;
import com.dapeng.cleardatabackend.model.dto.node.NodeDeleteRequest;
import com.dapeng.cleardatabackend.model.dto.node.NodeGetRequest;
import com.dapeng.cleardatabackend.model.dto.node.NodeUpdateRequest;
import com.dapeng.cleardatabackend.model.entity.Node;
import com.dapeng.cleardatabackend.model.vo.NodeVO;
import org.springframework.http.ResponseEntity;

import java.util.List;

/**
* @author dapeng
* @description 针对表【node(节点表)】的数据库操作Service
* @createDate 2024-12-22 13:29:10
*/
public interface NodeService extends IService<Node> {

    /**
     * 将节点保存到neo4j
     *
     * @param nodeList 节点列表
     * @param id       图谱id
     */
    void saveNodeToNeo4j(List<Node> nodeList, Long id);

    /**
     * 按图id删除节点(硬删除)
     *
     * @param graphId 图id
     */
    void hardRemoveByGraphId(Long graphId);

    /**
     * 获取节点页面
     *
     * @param nodeGetRequest 获取节点请求
     * @return {@link Page }<{@link NodeVO }>
     */
    Page<NodeVO> getNodePage(NodeGetRequest nodeGetRequest);

    /**
     * 下载csv
     *
     * @param id id
     * @return {@link ResponseEntity }<{@link byte[] }>
     */
    ResponseEntity<byte[]> downloadOriginalCsv(Long id);

    /**
     * 更新节点
     *
     * @param nodeUpdateRequest 节点更新请求
     * @return {@link Boolean }
     */
    Boolean updateNode(NodeUpdateRequest nodeUpdateRequest);

    /**
     * 删除节点
     *
     * @param nodeDeleteRequest 节点删除请求
     * @return {@link Boolean }
     */
    Boolean deleteNode(NodeDeleteRequest nodeDeleteRequest);

    /**
     * 添加节点
     *
     * @param nodeAddRequest 节点添加请求
     * @return {@link Long }
     */
    Long addNode(NodeAddRequest nodeAddRequest);

    /**
     * 删除节点
     *
     * @param graphId 图谱id
     * @return {@link Boolean }
     */
    Boolean deleteNodeByGraphId(Long graphId);
}
